{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sugeno Fuzzy Inference System\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import FuzzySystem as fs" ] }, { "cell_type": "markdown", "source": [ "### Inputs" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#INPUTS\n", "x11 = fs.FuzzySet('x11', fs.Trapmf([-1.5,-1.5,-1,1]))\n", "x12 = fs.FuzzySet('x12', fs.Trapmf([-1,1,1.5,1.5]))\n", "mf1 = fs.FuzzyVariable('MF1',[x11, x12], universe=[-1.5, 1.5])\n", "mf1.show()\n", "\n", "x21 = fs.FuzzySet('x21', fs.Trapmf([-1.5,-1.5,-1,1]))\n", "x22 = fs.FuzzySet('x22', fs.Trapmf([-1,1,1.5,1.5]))\n", "mf2 = fs.FuzzyVariable('MF2',[x21, x22], universe=[-1.5, 1.5])\n", "mf2.show()" ] }, { "cell_type": "markdown", "source": [ "### Sugeno consequents" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 3, "outputs": [], "source": [ "#OUTPUT\n", "output1 = fs.TSKConsequent(function='linear')\n", "\n", "def f1(x1, x2, c0, c1, c2): return c0+c1*x1+c2*x2\n", "output2 = fs.TSKConsequent(params=np.array([2,2.5,2.5]), function=f1)\n", "\n", "output3 = fs.TSKConsequent(params=8, function='constant')\n", "\n", "def f2(x1, x2, c0, c1, c2): return c0+c1*x1+c2*x2\n", "output4 = fs.TSKConsequent(params=np.array([4,4.5,3.5]), function=f2)" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "markdown", "source": [ "### Rules" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 4, "outputs": [], "source": [ "ant1 = fs.Antecedent(mf1['x11'] & mf2['x21'])\n", "rule1 = fs.FuzzyRule(ant1, output1)\n", "\n", "ant2 = fs.Antecedent(mf1['x11'] & mf2['x22'])\n", "rule2 = fs.FuzzyRule(ant2, output2)\n", "\n", "ant3 = fs.Antecedent(mf1['x12'] & mf2['x21'])\n", "rule3 = fs.FuzzyRule(ant3, output3)\n", "\n", "ant4 = fs.Antecedent(mf1['x12'] & mf2['x22'])\n", "rule4 = fs.FuzzyRule(ant4, output4)\n", "\n", "#Building the FIS\n", "\n", "fis = fs.FuzzyInferenceSystem([rule1, rule2, rule3, rule4], and_op='prod', or_op='sum')" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "markdown", "source": [ "### FIS Evaluation" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 5, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Inputs:\n", "MF1: -1.5\n", "MF2: 1.5\n", " IF MF1 is x11 and MF2 is x21 THEN linear_function, fs = [0] with weight = 1.00\n", " IF MF1 is x11 and MF2 is x22 THEN f1, fs = [1] with weight = 1.00\n", " IF MF1 is x12 and MF2 is x21 THEN constant_function, fs = [0] with weight = 1.00\n", " IF MF1 is x12 and MF2 is x22 THEN f2, fs = [0] with weight = 1.00\n" ] }, { "data": { "text/plain": "2.0" }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "#FIS Evaluation\n", "\n", "inputs = ({'MF1':-1.5, 'MF2':1.5})\n", "result = fis.eval(inputs, verbose=True)\n", "fs.TSKDefuzzifier(result).eval()" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Inputs:\n", "MF1: [-1.5, -4]\n", "MF2: [1.5, 5]\n", " IF MF1 is x11 and MF2 is x21 THEN linear_function, fs = [[0 0]] with weight = 1.00\n", " IF MF1 is x11 and MF2 is x22 THEN f1, fs = [[1 1]] with weight = 1.00\n", " IF MF1 is x12 and MF2 is x21 THEN constant_function, fs = [[0 0]] with weight = 1.00\n", " IF MF1 is x12 and MF2 is x22 THEN f2, fs = [[0 0]] with weight = 1.00\n" ] }, { "data": { "text/plain": "array([2. , 4.5])" }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inputs = ({'MF1':[-1.5, -4], 'MF2':[1.5, 5]})\n", "result = fis.eval(inputs, verbose=True)\n", "fs.TSKDefuzzifier(result).eval()" ] }, { "cell_type": "code", "execution_count": 6, "outputs": [], "source": [], "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } } } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }